home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 051-075 / scopedisk59 / gurumed / guru2.c < prev   
C/C++ Source or Header  |  1995-03-19  |  8KB  |  194 lines

  1. /*
  2.  * GURU
  3.  *
  4.  * by George Musser Jr.
  5.  * 11 January 1987
  6.  *
  7.  * This program decodes the first half of the Guru Meditation number, based
  8.  * on the alert types defined in exec/alerts.h.
  9.  *
  10.  */
  11.  
  12. #include <exec/alerts.h>
  13. #include <libraries/dos.h>
  14. #include <stdio.h>
  15.  
  16. #define AO_DiskCopy (AN_DiskCopy >> 24 | 0x00008000)
  17.  
  18. main(argc,argv)
  19. int argc;
  20. char **argv;
  21. {
  22.    /***** Functions and local variables *****/
  23.  
  24.    int stch_i();     /* Converts hex string to integer */
  25.    void fputs();
  26.  
  27.    unsigned long error;    /* User-specified argument */
  28.    char *o;                /* Object of alert, i.e. troublesome subsystem */
  29.    char *s;                /* Specific cause of crash */
  30.  
  31.    /***** Here we go *****/
  32.  
  33.    if (argc == 0)             /* Don't let Workbench call us */
  34.       exit (RETURN_ERROR);
  35.  
  36.    if (argc == 1) {
  37.       fputs ("How can I meditate without a number?\n",stderr);
  38.       exit (RETURN_ERROR);
  39.       }
  40.  
  41.    if (stch_i(argv[1],&error) == 0) {   /* Put argument into integer */
  42.       fputs ("Usage: ",stdout);
  43.       fputs (argv[0],stdout);
  44.       fputs (" <hex integer>\n",stdout);
  45.       exit (RETURN_WARN);
  46.       }
  47.  
  48.    /***** Alert object *****/
  49.  
  50.    switch ((error & 0x7F000000) >> 24 | 0x00008000) {
  51.  
  52.       case AO_ExecLib      : o = "Exec"; break;
  53.       case AO_GraphicsLib  : o = "Graphics"; break;
  54.       case AO_LayersLib    : o = "Layers library"; break;
  55.       case AO_Intuition    : o = "Intuition"; break;
  56.       case AO_MathLib      : o = "Math library"; break;
  57.       case AO_CListLib     : o = "CList library"; break;
  58.       case AO_DOSLib       : o = "DOS"; break;
  59.       case AO_RAMLib       : o = "RAM library"; break;
  60.       case AO_IconLib      : o = "Icon library"; break;
  61.       case AO_ExpansionLib : o = "Expansion library"; break;
  62.       case AO_AudioDev     : o = "Audio device"; break;
  63.       case AO_ConsoleDev   : o = "Console device"; break;
  64.       case AO_GamePortDev  : o = "Gameport device"; break;
  65.       case AO_KeyboardDev  : o = "Keyboard device"; break;
  66.       case AO_TrackDiskDev : o = "Trackdisk device"; break;
  67.       case AO_TimerDev     : o = "Timer device"; break;
  68.       case AO_CIARsrc      : o = "CIA resource"; break;
  69.       case AO_DiskRsrc     : o = "Disk resource"; break;
  70.       case AO_MiscRsrc     : o = "Misc resource"; break;
  71.       case AO_BootStrap    : o = "Bootstrap"; break;
  72.       case AO_Workbench    : o = "Workbench"; break;
  73.       case AO_DiskCopy     : o = "DiskCopy"; break;
  74.       default              : o = "Unknown subsystem"; break;
  75.       }  /* object */
  76.  
  77.    /***** Specific error *****/
  78.  
  79.    switch (error) {
  80.  
  81.       /* Exec woes */
  82.  
  83.       case AN_ExcptVect  : s = "bad 68000 exception vector checksum"; break;
  84.       case AN_BaseChkSum : s = "bad ExecBase checksum"; break;
  85.       case AN_LibChkSum  : s = "library checksum failure"; break;
  86.       case AN_LibMem     : s = "insufficient memory to make library"; break;
  87.       case AN_MemCorrupt : s = "corrupted memory list"; break;
  88.       case AN_IntrMem    : s = "insufficient memory for interrupt servers";
  89.                            break;
  90.       case AN_InitAPtr   : s = "InitStruct() of an APTR source"; break;
  91.       case AN_SemCorrupt : s = "illegal semaphore state"; break;
  92.       case AN_FreeTwice  : s = "tried to free memory already freed"; break;
  93.       case AN_BogusExcpt : s = "illegal 680x0 exception taken"; break;
  94.  
  95.       /* Graphics library */
  96.  
  97.       case AN_GfxNoMem     : s = "insufficient memory for graphics"; break;
  98.       case AN_LongFrame    : s = "insufficient memory for long frame"; break;
  99.       case AN_ShortFrame   : s = "insufficient memory for short frame"; break;
  100.       case AN_TextTmpRas   : s = "insufficient memory for text TmpRas"; break;
  101.       case AN_BltBitMap    : s = "insufficient memory for BltBitMap"; break;
  102.       case AN_RegionMemory : s = "insufficient memory for regions"; break;
  103.       case AN_MakeVPort    : s = "insufficient memory for MakeVPort"; break;
  104.       case AN_GfxNoLCM     : s = "emergency memory not available"; break;
  105.  
  106.       /* Layers library */
  107.  
  108.       case AN_LayersNoMem  : s = "insufficient memory for layers"; break;
  109.  
  110.       /* Intuition */
  111.  
  112.       case AN_GadgetType   :
  113.       case AN_BadGadget    : s = "unknown gadget type"; break;
  114.       case AN_CreatePort   : s = "insufficient memory to create port"; break;
  115.       case AN_ItemAlloc    : s = "insufficient memory for item plane"; break;
  116.       case AN_SubAlloc     : s = "insufficient memory for sub alloc"; break;
  117.       case AN_PlaneAlloc   : s = "insufficient memory for plane alloc"; break;
  118.       case AN_ItemBoxTop   : s = "item box top is less than RelZero"; break;
  119.       case AN_OpenScreen   : s = "insufficient memory to open screen"; break;
  120.       case AN_OpenScrnRast : s = "insufficient memory to allocate screen raster";
  121.                              break;
  122.       case AN_SysScrnType  : s = "unknown type of sys screen"; break;
  123.       case AN_AddSWGadget  : s = "insufficient memory to add SW gadgets";
  124.                              break;
  125.       case AN_OpenWindow   : s = "insufficient memory to open window"; break;
  126.       case AN_BadState     : s = "bad state return entering Intuition"; break;
  127.       case AN_BadMessage   : s = "bad message received by IDCMP"; break;
  128.       case AN_WeirdEcho    : s = "weird echo caused incomprehension"; break;
  129.       case AN_NoConsole    : s = "couldn't open the console device"; break;
  130.  
  131.       /* DOS library */
  132.  
  133.       case AN_StartMem     : s = "insufficient memory at startup"; break;
  134.       case AN_EndTask      : s = "EndTask didn't"; break;
  135.       case AN_QPktFail     : s = "Qpkt failed"; break;
  136.       case AN_AsyncPkt     : s = "unexpected packet received"; break;
  137.       case AN_FreeVec      : s = "FreeVec failed"; break;
  138.       case AN_DiskBlkSeq   : s = "disk block sequence error"; break;
  139.       case AN_BitMap       : s = "BitMap corrupt"; break;
  140.       case AN_KeyFree      : s = "key already free"; break;
  141.       case AN_BadChkSum    : s = "invalid checksum"; break;
  142.       case AN_DiskError    : s = "disk error"; break;
  143.       case AN_KeyRange     : s = "key out of range"; break;
  144.       case AN_BadOverlay   : s = "bad overlay"; break;
  145.  
  146.       /* RAM library */
  147.  
  148.       case AN_BadSegList   : s = "no overlays in library SegLists"; break;
  149.  
  150.       /* Trackdisk device */
  151.  
  152.       case AN_TDCalibSeek  : s = "seek error on calibration"; break;
  153.       case AN_TDDelay      : s = "error on timer wait"; break;
  154.  
  155.       /* Timer device */
  156.  
  157.       case AN_TMBadReq     : s = "bad timer request"; break;
  158.       case AN_TMBadSupply  : s = "power supply doesn't supply ticks"; break;
  159.  
  160.       /* Disk resource */
  161.  
  162.       case AN_DRHasDisk    : s = "tried to get unit, but already had disk";
  163.                              break;
  164.       case AN_DRIntNoAct   : s = "no active unit to interrupt"; break;
  165.  
  166.       /* Bootstrap */
  167.  
  168.       case AN_BootError    : s = "boot code returned an error"; break;
  169.  
  170.       /* Don't know specific difficulty, try to determine general problem */
  171.  
  172.       default : switch (error & 0x00FF0000) {
  173.  
  174.                    case AG_NoMemory : s = "no memory"; break;
  175.                    case AG_MakeLib  : s = "MakeLib"; break;
  176.                    case AG_OpenLib  : s = "OpenLib"; break;
  177.                    case AG_OpenDev  : s = "OpenDev"; break;
  178.                    case AG_OpenRes  : s = "OpenRes"; break;
  179.                    case AG_IOError  : s = "IO error"; break;
  180.                    case AG_NoSignal : s = "no signal"; break;
  181.                    default          : s = "unknown error"; break;
  182.  
  183.                    }  /* general */
  184.  
  185.          }  /* specific */
  186.  
  187.    /***** Print it out *****/
  188.  
  189.    fputs (o,stdout);
  190.    fputs (": ",stdout);
  191.    fputs (s,stdout);
  192.    fputs (".\n",stdout);
  193. }
  194.